#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];//数组
    int top;//始终指向栈顶的一个变量
} SqStack;

//初始化栈
void InitStack(SqStack &s) {
    s.top = -1;
}

//判断栈是否为空
bool StackEmpty(SqStack s) {
    if (s.top == -1) {
        return true;
    }
    return false;
}

//入栈
bool Push(SqStack &s, ElemType i) {
    //判断栈是否满了
    if (s.top == MaxSize - 1) {
        return false;
    }
    s.data[++s.top] = i;
    return true;

}

//获取栈顶元素
bool GetTop(SqStack s, ElemType &m) {
    if (StackEmpty(s)) {
        return false;
    }
    m = s.data[s.top];//拿到栈顶元素
    return true;
}

//弹栈
bool Pop(SqStack &s, ElemType &m) {
    //每次对栈进行操作，都要判断当前栈是否为空，切记！！！
    if (StackEmpty(s)) {
        return false;
    }
    m = s.data[s.top--];
    return true;
}

//栈的实战训练
int main() {
    SqStack s;
    bool flag;
    InitStack(s);
    flag = StackEmpty(s);
    if (flag) {
        printf("Stack is empty");
    }

    Push(s, 3);//入栈元素
    Push(s, 4);//入栈元素
    Push(s, 5);//入栈元素
    ElemType m;
    flag = GetTop(s, m);
    if (flag) {
        printf("\nget top =%2d", m);
    }
    flag = Pop(s, m);//弹出栈顶元素
    if (flag) {
        printf("\npop element is %2d", m);
    }
    return 0;
}